home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Auge 4000 / Auge 4000 #41 (1989-11-05)(Amiga User Gruppe Einzugsgebiet 4000).zip / Auge 4000 #41 (1989-11-05)(Amiga User Gruppe Einzugsgebiet 4000).adf / Hilfen / Print / Print.c < prev    next >
C/C++ Source or Header  |  1989-11-04  |  8KB  |  535 lines

  1. #include <exec/types.h>
  2. #include <stdio.h>
  3. #include <libraries/dos.h>
  4. #include <libraries/dosextens.h>
  5.  
  6. struct FileInfoBlock block;
  7. struct DosLibrary *DosBase;
  8. extern LONG *OpenLibrary();
  9.  
  10. char *monat[]=
  11.  {
  12.   "Januar",
  13.   "Februar",
  14.   "März",
  15.   "April",
  16.   "Mai",
  17.   "Juni",
  18.   "Juli",
  19.   "August",
  20.   "September",
  21.   "Oktober",
  22.   "November",
  23.   "Dezember"
  24.  };
  25.  
  26. int laenge[12]=
  27.  {
  28.   31,
  29.   28,
  30.   31,
  31.   30,
  32.   31,
  33.   30,
  34.   31,
  35.   31,
  36.   30,
  37.   31,
  38.   30,
  39.   31
  40.  };
  41.  
  42. char *text[]=
  43. {
  44.  " Listing von ",
  45.  " Länge der Datei: ",
  46.  "Bytes",
  47.  "            belegte Blöcke: ",
  48.  " Protection-Flags: ",
  49.  " Erstellungsdatum der Datei:    ",
  50.  "um",
  51.  " Erstellungsdatum des Listings: ",
  52.  " Dieses Listing wurde mit ",
  53.  " V1.0 von Jörg Hüddersen erstellt."
  54. };
  55.  
  56.  
  57. char *fehler[]=
  58. {
  59.  "Fehler beim Öffnen der dos.library !",
  60.  "Fehler beim Öffnen der Datei !",
  61.  "Die Datei ist ein Directory !",
  62.  "Die Datei ist lesegeschützt !",
  63.  "Fehler beim Öffnen des Druckerkanals !"
  64. };
  65.  
  66.  
  67. int amerikanisch, deutsch, protectionflags[8];
  68. long datum[12],aktdat[3];
  69. char *proflags="hsparwed";
  70. FILE *eingabe, *ausgabe, *fopen();
  71.  
  72.  
  73. Flag(flags)
  74. register long flags;
  75. {
  76.  register int wert=128,zaehler=7;
  77.  
  78.  while (flags>0L)
  79.   {
  80.    if(flags-wert>=0L)
  81.     {
  82.      flags-=wert;
  83.      protectionflags[zaehler]=1;
  84.      zaehler--;
  85.      wert/=2;
  86.     }
  87.    else
  88.     {
  89.      protectionflags[zaehler]=0;
  90.      zaehler--;
  91.      wert/=2;
  92.     }
  93.    }
  94.  
  95.  while(zaehler>=0)
  96.   {
  97.    protectionflags[zaehler]=0;
  98.    zaehler--;
  99.   }
  100. }
  101.  
  102.  
  103. Datum(days,minute,tick,nummer)
  104. register long days,minute,tick;
  105. register int nummer;
  106. {
  107.  register int t=0,i=2;
  108.  datum[1+nummer]=1;
  109.  datum[2+nummer]=1978;
  110.  datum[3+nummer]=0;
  111.  
  112.  while(days>=365)
  113.   {
  114.    if (i<=3)
  115.     {
  116.      days-=365;
  117.      datum[2+nummer]++;
  118.      i++;
  119.     }
  120.    else
  121.     {
  122.      days-=366;
  123.      datum[2+nummer]++;
  124.      i=1;
  125.     }
  126.   }
  127.  
  128.  if (days<0)
  129.   {
  130.    datum[2+nummer]--;
  131.    days+=366;
  132.   }
  133.  
  134.  while (days>=laenge[t])
  135.   {
  136.    days-=laenge[t];
  137.    if ((i==4) && (t==1))
  138.     days--;
  139.    datum[1+nummer]++;
  140.    if (t<=10)
  141.     t++;
  142.   }
  143.  
  144.  datum[0+nummer]=days+1;
  145.  
  146.  while(minute>=60)
  147.   {
  148.    minute-=60;
  149.    datum[3+nummer]++;
  150.   }
  151.  
  152.  datum[4+nummer]=minute;
  153.  
  154.  while (tick>=50)
  155.   {
  156.    tick-=50;
  157.    datum[5+nummer]++;
  158.   }
  159.  if (tick>=25)
  160.   datum[5+nummer]++;
  161. }
  162.  
  163. Amerikanisch()
  164. {
  165.  fputc(27,ausgabe);
  166.  fputc('R',ausgabe);
  167.  fputc(0,ausgabe);
  168.  amerikanisch=1;
  169.  deutsch=0;
  170. }
  171.  
  172.  
  173. Deutsch()
  174. {
  175.  fputc(27,ausgabe);
  176.  fputc('R',ausgabe);
  177.  fputc(2,ausgabe);
  178.  amerikanisch=0;
  179.  deutsch=1;
  180. }
  181.  
  182.  
  183. LineFeed()
  184. {
  185.  fputc(10,ausgabe);
  186. }
  187.  
  188.  
  189. CarriageReturn()
  190. {
  191.  fputc(13,ausgabe);
  192. }
  193.  
  194.  
  195. Space()
  196. {
  197.  fputc(32,ausgabe);
  198. }
  199.  
  200.  
  201. HorizontalTab()
  202. {
  203.  fputc(9,ausgabe);
  204. }
  205.  
  206.  
  207. TabAt(position)
  208. register int position;
  209. {
  210.  fputc(27,ausgabe);
  211.  fputc('D',ausgabe);
  212.  fputc(position,ausgabe);
  213.  fputc(0,ausgabe);
  214. }
  215.  
  216. Big()
  217. {
  218.  fputc(28,ausgabe);
  219.  fputc('E',ausgabe);
  220.  fputc('1',ausgabe);
  221.  fputc(28,ausgabe);
  222.  fputc('V',ausgabe);
  223.  fputc(1,ausgabe);
  224. }
  225.  
  226. Small()
  227. {
  228.  fputc(28,ausgabe);
  229.  fputc('E',ausgabe);
  230.  fputc(0,ausgabe);
  231.  fputc(28,ausgabe);
  232.  fputc('V',ausgabe);
  233.  fputc(0,ausgabe);
  234. }
  235.  
  236. send (Buchstabe)
  237. register char Buchstabe;
  238. {
  239.  switch (Buchstabe)
  240.   {
  241.    case '{':
  242.     if (deutsch)
  243.      Amerikanisch();
  244.     fputc('{',ausgabe);
  245.     break;
  246.    case '}':
  247.     if (deutsch)
  248.      Amerikanisch();
  249.     fputc('}',ausgabe);
  250.     break;
  251.    case '[':
  252.     if (deutsch)
  253.      Amerikanisch();
  254.     fputc('[',ausgabe);
  255.     break;
  256.    case ']':
  257.     if (deutsch)
  258.      Amerikanisch();
  259.     fputc(']',ausgabe);
  260.     break;
  261.    case 92:
  262.     if (deutsch)
  263.      Amerikanisch();
  264.     fputc(92,ausgabe);
  265.     break;
  266.    case '|':
  267.     if (deutsch)
  268.      Amerikanisch();
  269.     fputc('|',ausgabe);
  270.     break;
  271.    case 228:
  272.     if (amerikanisch)
  273.      Deutsch();
  274.     fputc(123,ausgabe);
  275.     break;
  276.    case 246:
  277.     if (amerikanisch)
  278.      Deutsch();
  279.     fputc(124,ausgabe);
  280.     break;
  281.    case 252:
  282.     if (amerikanisch)
  283.      Deutsch();
  284.     fputc(125,ausgabe);
  285.     break;
  286.    case 196:
  287.     if (amerikanisch)
  288.      Deutsch();
  289.     fputc(91,ausgabe);
  290.     break;
  291.    case 214:
  292.     if (amerikanisch)
  293.      Deutsch();
  294.     fputc(92,ausgabe);
  295.     break;
  296.    case 220:
  297.     if (amerikanisch)
  298.      Deutsch();
  299.     fputc(93,ausgabe);
  300.     break;
  301.    case 223:
  302.     if (amerikanisch)
  303.      Deutsch();
  304.     fputc(126,ausgabe);
  305.     break;
  306.    case 'ä':
  307.     if (amerikanisch)
  308.      Deutsch();
  309.     fputc(123,ausgabe);
  310.     break;
  311.    case 'ö':
  312.     if (amerikanisch)
  313.      Deutsch();
  314.     fputc(124,ausgabe);
  315.     break;
  316.    case 'ü':
  317.     if (amerikanisch)
  318.      Deutsch();
  319.     fputc(125,ausgabe);
  320.     break;
  321.    case 'Ä':
  322.     if (amerikanisch)
  323.      Deutsch();
  324.     fputc(91,ausgabe);
  325.     break;
  326.    case 'Ö':
  327.     if (amerikanisch)
  328.      Deutsch();
  329.     fputc(92,ausgabe);
  330.     break;
  331.    case 'Ü':
  332.     if (amerikanisch)
  333.      Deutsch();
  334.     fputc(93,ausgabe);
  335.     break;
  336.    case 'ß':
  337.     if (amerikanisch)
  338.      Deutsch();
  339.     fputc(126,ausgabe);
  340.     break;
  341.    default:
  342.     fputc(Buchstabe,ausgabe);
  343.   }
  344. }
  345.  
  346.  
  347. solange (text)
  348. char text[];
  349. {
  350.  register int i=0;
  351.  
  352.  while (text[i])
  353.   {
  354.    send(text[i]);
  355.    i++;
  356.   }
  357. }
  358.  
  359. main (argc,argv)
  360. int argc;
  361. char *argv[];
  362.  
  363. {
  364.  register int Zeichen,altZeichen,i=0,Nummer=1,t;
  365.  register long lo;
  366.  
  367.  while(argv[0][i])
  368.   {
  369.    if (argv[0][i]>=97 && argv[0][i]<=122)
  370.     argv[0][i]-=32;
  371.    i++;
  372.   }
  373.  i=0;
  374.  printf("%s V1.0\n",argv[0]);
  375.  printf("Copyright by Jörg Hüddersen 1988/89\n");
  376.  
  377.  if (!(DosBase=(struct DosLibrary *)
  378.      OpenLibrary("dos.library",0)))
  379.   {
  380.    printf("%s\n",fehler[0]);
  381.    exit (FALSE);
  382.   }
  383.  
  384.  if (argc==2)
  385.   {
  386.    lo=Lock(argv[1], ACCESS_READ);
  387.    if (lo)
  388.     {
  389.      if(!Examine(lo, &block))
  390.       {
  391.        printf("%s\n",fehler[1]);
  392.        exit(FALSE);
  393.       }
  394.     }
  395.    else
  396.     {
  397.      printf("%s\n",fehler[1]);
  398.      exit(FALSE);
  399.     }
  400.    if (block.fib_DirEntryType>0)
  401.     {
  402.      printf("%s\n",fehler[2]);
  403.      exit(FALSE);
  404.     }
  405.  
  406.    Flag(block.fib_Protection);
  407.    if (protectionflags[3]==1)
  408.     {
  409.      printf("%s\n",fehler[3]);
  410.      exit(FALSE);
  411.     }
  412.    UnLock (lo);
  413.  
  414.    if (!(eingabe=fopen(argv[1],"r")))
  415.     {
  416.      printf("%s\n",fehler[1]);
  417.      exit (10L);
  418.     }
  419.  
  420.    if (!(ausgabe=fopen("PAR:Listing","w")))
  421.     {
  422.      printf("%s\n",fehler[4]);
  423.      fclose (eingabe);
  424.      exit (10L);
  425.     }
  426.  
  427.    DateStamp(&aktdat[0]);
  428.  
  429.    Deutsch();
  430.    TabAt(6);
  431.  
  432.    Datum(block.fib_Date.ds_Days,block.fib_Date.ds_Minute,
  433.          block.fib_Date.ds_Tick,0);
  434.    Datum(aktdat[0],aktdat[1],aktdat[2],6);
  435.  
  436.    solange(text[0]);
  437.    Big();
  438.    solange(argv[1]);
  439.    Small();
  440.    LineFeed();
  441.    Space();
  442.    solange(block.fib_Comment);
  443.    LineFeed();
  444.    solange(text[1]);
  445.    fprintf(ausgabe,"%ld ",block.fib_Size);
  446.    for (t=2; t<=3; t++)
  447.     solange(text[t]);
  448.    fprintf(ausgabe,"%ld",block.fib_NumBlocks);
  449.    LineFeed();
  450.    solange(text[4]);
  451.    for (t=7; t>=0; t--)
  452.     {
  453.      if (!protectionflags[t])
  454.       send(proflags[7-t]);
  455.      else
  456.       send('-');
  457.     }
  458.  
  459.    LineFeed();
  460.    solange(text[5]);
  461.    if (datum[0]<10)
  462.     send('0');
  463.    fprintf(ausgabe,"%ld.",datum[0]);
  464.    solange(monat[datum[1]-1]);
  465.    fprintf(ausgabe," %ld ",datum[2]);
  466.  
  467.    solange(text[6]);
  468.    if (datum[3]<10)
  469.      send('0');
  470.    fprintf(ausgabe," %ld.",datum[3]);
  471.    if (datum[4]<10)
  472.     send('0');
  473.    fprintf(ausgabe,"%ld.",datum[4]);
  474.    if (datum[5]<10)
  475.     send('0');
  476.    fprintf(ausgabe,"%ld Uhr",datum[5]);
  477.  
  478.    LineFeed();
  479.    solange(text[7]);
  480.    if (datum[6]<10)
  481.     send('0');
  482.    fprintf(ausgabe,"%ld.",datum[6]);
  483.    solange(monat[datum[7]-1]);
  484.    fprintf(ausgabe," %ld ",datum[8]);
  485.    solange(text[6]);
  486.    if (datum[9]<10)
  487.      send('0');
  488.    fprintf(ausgabe," %ld.",datum[9]);
  489.    if (datum[10]<10)
  490.     send('0', ausgabe);
  491.    fprintf(ausgabe,"%ld.",datum[10]);
  492.    if (datum[11]<10)
  493.     send('0', ausgabe);
  494.    fprintf(ausgabe,"%ld Uhr",datum[11]);
  495.  
  496.  
  497.    LineFeed();
  498.    LineFeed();
  499.  
  500.    altZeichen=10;
  501.    while((Zeichen=fgetc(eingabe))!=EOF)
  502.     {
  503.      if (altZeichen==10)
  504.       {
  505.        LineFeed();
  506.        fprintf(ausgabe,"%6d",Nummer);
  507.        Nummer++;
  508.        HorizontalTab();
  509.        fputc(':',ausgabe);
  510.        Space();
  511.        Space();
  512.       }
  513.      else
  514.       send(altZeichen);
  515.      altZeichen=Zeichen;
  516.     }
  517.  
  518.    LineFeed();
  519.    LineFeed();
  520.    solange(text[8]);
  521.    solange(argv[0]);
  522.    solange(text[9]);
  523.  
  524.    LineFeed();
  525.    CarriageReturn();
  526.    if (eingabe) fclose(eingabe);
  527.    if (ausgabe) fclose(ausgabe);
  528.   }
  529.  else
  530.   printf("USAGE %s [Datei]\n",argv[0]);
  531.  
  532.  exit(TRUE);
  533. }
  534.  
  535.